// IJK defines a vector in 3D space.
typedef struct
{
  float i, j, k;
} IJK;

float deg(float r)
{
  return 57.29577951*r;
}

float rad(float d)
{
  return 0.017453292*d;
}

void cross_product(IJK *v1, IJK *v2, IJK *v3)
{
  v3->i=(v1->j*v2->k-v1->k*v2->j);
  v3->j=(v1->k*v2->i-v1->i*v2->k);
  v3->k=(v1->i*v2->j-v1->j*v2->i);
}

float normalize_vector(IJK *v)
{
  float lenght;

  lenght=sqrt(v->i*v->i+v->j*v->j+v->k*v->k);
  if (lenght>0)
  {
    v->i/=lenght;
	v->j/=lenght;
	v->k/=lenght;
  }

  return lenght;
}

float dot_product(IJK *v1,  IJK *v2)
{
  return v1->i*v2->i+v1->j*v2->j+v1->k*v2->k;
}

float give_vector_lenght(IJK *v)
{
  return sqrt(v->i*v->i+v->j*v->j+v->k*v->k);
}

float give_vector_angle(IJK *v1, IJK *v2)
{
  return acos(dot_product(v1,v2)/(give_vector_lenght(v1)*give_vector_lenght(v2)));
}
